/*
 * File:   interseccionTest.c
 * Author: wadi
 *
 * Created on 22/03/2012, 16:37:42
 */

#include <stdio.h>
#include <stdlib.h>
#include "relativo.h"
/*
 * Intersección.
Se tienen dos o más archivos con registros de igual
formato, y ordenados por la misma clave, y se
quiere grabar en el archivo de salida únicamente
los registros que figuren en todos los archivos de
entrada.
Algoritmo:
Busco Mínimo Al menos 1
archivo
sin clave
Mínima.
Todos los
archivos
con clave
mínima
Avanzo los que
tienen clave
minima.
Grabo el
registro en salida y
avanzo todos.
Cuando uno de los archivos llega al EOF implica
la finalización del proceso.

 */
struct reg{
    int padron;
};
void setup() {
    printf("interseccionTest setup\n");
    //Creamos el archivo y lo abrimos
    if(R_CREATE("inter1.dat",sizeof(reg),20)!=RES_ERROR){
    int fd=R_OPEN("inter1.dat",WRITE);
        if(fd!=RES_NULL){
            int i;
            for (i = 0; i < 20; i++) {
                reg r;
                r.padron=i+1;
                R_WRITE(fd,i,&reg);
            }
            R_CLOSE(fd);
        }//fin pudo abrir
    }// fin pudo crear
    
    printf("Creado archivo de padrones del 1 al 20");
    
    if(R_CREATE("inter2.dat",sizeof(reg),10)!=RES_NULL){
        int fd=R_OPEN("inter2.dat",WRITE);
        if(fd!=RES_NULL){
            int i;
            //Escribimos padrones del 1 al 11
            for (i = 0; i <11; i++) {
                reg r;
                r.padron=i;
                R_WRITE(fd,i,&reg);
            }
            R_CLOSE(fd);
        }
    }
    
}

void test() {
    int fd1=R_OPEN("inter1.dat",READ);
    int fd2=R_OPEN("inter2.dat",READ);
    //creamos el archivo destino para escritura
    R_CREATE("destino.dat",sizeof(reg),10);
    int fdestino=R_OPEN("destino.dat",WRITE);
    if(fdestino!=RES_ERROR && fd1!=RES_ERROR && fd2!=RES_ERROR){
        //Empezamos a iterar sobre los archios
        reg reg1,reg2;
        while(R_READNEXT(fd1,&reg1)!=RES_EOF ||  R_READNEXT(fd2,&reg2)!=RES_EOF){
        
            if(reg1.padron==reg2.padron){

            }
        
        }
    }
    
    
    
}

int main(int argc, char** argv) {
    printf("%%SUITE_STARTING%% interseccionTest\n");
    printf("%%SUITE_STARTED%%\n");

    printf("%%TEST_STARTED%% test1 (interseccionTest)\n");
    setup();
    printf("%%TEST_FINISHED%% time=0 test1 (interseccionTest) \n");

    printf("%%TEST_STARTED%% test2 (interseccionTest)\n");
    test();
    printf("%%TEST_FINISHED%% time=0 test2 (interseccionTest) \n");

    printf("%%SUITE_FINISHED%% time=0\n");

    return (EXIT_SUCCESS);
}
